package com.fuchuang.seckillsystem.service;

import com.fuchuang.seckillsystem.vo.SeckillVo;

import java.util.List;

public interface ISeckillService {
    
    /**
     * 设置jvm库存
     *
     * @param activityId 商品秒杀活动id
     * @param goodsId    商品id
     * @param flag       库存是否为空
     */
    void setIsEmpty(Integer activityId, Integer goodsId, Boolean flag);
    
    /**
     * 获取秒杀路径
     *
     * @param activityId 商品秒杀活动id
     * @param goodsId    商品id
     * @param userId     用户id
     * @return 秒杀路径
     */
    String getSeckillPath(Integer activityId, Integer goodsId, Integer userId, Integer status);
    
    
    /**
     * 秒杀处理
     *
     * @param activityId 商品秒杀活动id
     * @param goodsId    商品id
     * @param userId     用户id
     * @param path       秒杀路径
     */
    void seckill(Integer activityId, Integer goodsId, String path, Integer userId);
    
    
    /**
     * 将商品预加载到redis中
     */
    void insertGoodsToRedis(Boolean isSeckill);
    
    /**
     * 将结束了的秒杀活动商品从jvm中移除
     */
    void removeGoodsFromIsEmpty(List<Integer> goodsList, Integer activityId);
    
    
    /**
     * 重置内存
     */
    void resetIsEmpty();
    
    
    /**
     * 轮询查看秒杀结果
     *
     * @param activityId 商品秒杀活动id
     * @param goodsId    商品id
     * @param userId     用户id
     */
    Integer getResult(Integer activityId, Integer goodsId, Integer userId);
    
    /**
     * 由于秒杀阶段库存变化快，故单独写此接口获取秒杀商品库存
     */
    Integer getStock(SeckillVo seckillVo);
}
